
package gz.copydatabase.Utils;

import android.app.Application;
import android.content.Context;
import android.content.SharedPreferences;


import java.util.Map;

//IS_FIRST,
//        PERMIT,TEMP_FREE,FRIEND_FREE,PAYMENT_LONG,
//        IS_FREE,IS_HOURADD,IS_CLEAR_OLD_DATA,
//        MAIN_SERVER_IP,MINOR_SERVER_IP,
//        MAIN_IN_CAMERA_IP,MAIN_OUT_CAMERA_IP,
//        MINOR_IN_CAMERA_IP,MINOR_OUT_CAMERA_IP,
//        DISPLAY_IP,
//        ALL_CAR_PLACE,CLEARDAYS,ENTER_DELAY,
//        USER_TYPE,USER_NAME,
//        IN_CAR_COUNT,OUT_CAR_CONUT,CHARGE_CAR_NUMER,
//        LOGIN_STATUS,CHARGE_MONEY,
//        USB_PATH,DEDUCT_MODE,
//        TEMP_CAR_IN,TEMP_CAR_FREE,
//        IS_PRINT_CARD,IS_USE_TOLL,IS_USE_CHINA,
//        IS_EMERGENCY_MODE,IS_HUI,IS_SHOW_USER,
//        IS_No_Parking_IN,COMPANY_NAME,IS_EDGE_MONEY,
//        TOKEN,
//        DEV_ID,DEV_NAME,
//        LOGIN_TIME
public class SPUtils {
    public enum Key {
        IS_FIRST,
        DEV_ID,
        ID,
        USB_PATH
    }
    private SharedPreferences sp;
    private SharedPreferences.Editor editor;
    public void init(Application context) {
        boolean first= this.getBoolean(Key.IS_FIRST);
        if (!first) {
            putBoolean(Key.IS_FIRST,true);
            putString(Key.ID, "");
        }
    }
    /**
     * SPUtils构造函数
     *
     * @param context
     * @param spName  spName
     */
    public SPUtils(Context context, String spName) {
        sp = context.getSharedPreferences(spName, Context.MODE_PRIVATE);
        editor = sp.edit();
        editor.apply();
    }

    /**
     *  SP中写入String类型value
     *
     * @param key   键
     * @param value 值
     */
    public void putString(Key key, String value) {
        editor.putString(""+key, value).apply();
    }
//    public void putString(String key, String value) {
//        editor.putString(key, value).apply();
//    }

    /**
     * SP中读取String
     *
     * @param key 键
     * @return 存在返回对应值，不存在返回默认值{@code null}
     */
    public String getString(Key key) {
        return getString(key, null);
    }
//    public String getString(String key) {
//        return getString(key, null);
//    }

    /**
     * SP中读取String
     *
     * @param key          键
     * @param defaultValue 默认值
     * @return 存在返回对应值，不存在返回默认值{@code defaultValue}
     */
    public String getString(Key key, String defaultValue) {
        return sp.getString(""+key, defaultValue);
    }
//    public String getString(String key, String defaultValue) {
//        return sp.getString(key, defaultValue);
//    }

    /**
     * SP中写入int类型value
     *
     * @param key   键
     * @param value 值
     */
    public void putInt(Key key,int value) {
        editor.putInt(""+key, value).apply();
    }


//    public void putInt(String key, int value) {
//        editor.putInt(key, value).apply();
//    }

    /**
     * SP中读取int
     *
     * @param key 键
     * @return 存在返回对应值，不存在返回默认值-1
     */
    public int getInt(Key key) {
        return getInt(key, -1);
    }
//    public int getInt(String key) {
//        return getInt(key, -1);
//    }

    /**
     * SP中读取int
     *
     * @param key          键
     * @param defaultValue 默认值
     * @return 存在返回对应值，不存在返回默认值{@code defaultValue}
     */
    public int getInt(Key key, int defaultValue) {
        return sp.getInt(""+key, defaultValue);
    }
//    public int getInt(String key, int defaultValue) {
//        return sp.getInt(key, defaultValue);
//    }
    /**
     * SP中写入long类型value
     *
     * @param key   键
     * @param value 值
     */
    public void putLong(Key key, long value) {
        editor.putLong(""+key, value).apply();
    }
//    public void putLong(String key, long value) {
//        editor.putLong(key, value).apply();
//    }

    /**
     * SP中读取long
     *
     * @param key 键
     * @return 存在返回对应值，不存在返回默认值-1
     */
    public long getLong(Key key) {
        return getLong(key, -1L);
    }
//    public long getLong(String key) {
//        return getLong(key, -1L);
//    }

    /**
     * SP中读取long
     *
     * @param key          键
     * @param defaultValue 默认值
     * @return 存在返回对应值，不存在返回默认值{@code defaultValue}
     */
    public long getLong(Key key, long defaultValue) {
        return sp.getLong(""+key, defaultValue);
    }
//    public long getLong(String key, long defaultValue) {
//        return sp.getLong(key, defaultValue);
//    }

    /**
     * SP中写入float类型value
     *
     * @param key   键
     * @param value 值
     */
    public void putFloat(Key key, float value) {
        editor.putFloat(""+key, value).apply();
    }
//    public void putFloat(String key, float value) {
//        editor.putFloat(key, value).apply();
//    }

    /**
     * SP中读取float
     *
     * @param key 键
     * @return 存在返回对应值，不存在返回默认值-1
     */
    public float getFloat(Key key) {
        return getFloat(key, -1f);
    }
//    public float getFloat(String key) {
//        return getFloat(key, -1f);
//    }

    /**
     * SP中读取float
     *
     * @param key          键
     * @param defaultValue 默认值
     * @return 存在返回对应值，不存在返回默认值{@code defaultValue}
     */
    public float getFloat(Key key, float defaultValue) {
        return sp.getFloat(""+key, defaultValue);
    }
//    public float getFloat(String key, float defaultValue) {
//        return sp.getFloat(key, defaultValue);
//    }

    /**
     * SP中写入boolean类型value
     *
     * @param key   键
     * @param value 值
     */
    public void putBoolean(Key key, boolean value) {
        editor.putBoolean(""+key, value).apply();
    }
//    public void putBoolean(String key, boolean value) {
//        editor.putBoolean(key, value).apply();
//    }

    /**
     * SP中读取boolean
     *
     * @param key 键
     * @return 存在返回对应值，不存在返回默认值{@code false}
     */
    public boolean getBoolean(Key key) {
        return getBoolean(key, false);
    }
//    public boolean getBoolean(String key) {
//        return getBoolean(key, false);
//    }

    /**
     * SP中读取boolean
     *
     * @param key          键
     * @param defaultValue 默认值
     * @return 存在返回对应值，不存在返回默认值{@code defaultValue}
     */
    public boolean getBoolean(Key key, boolean defaultValue) {
        return sp.getBoolean(""+key, defaultValue);
    }
//    public boolean getBoolean(String key, boolean defaultValue) {
//        return sp.getBoolean(key, defaultValue);
//    }

    /**
     * 获取SP中所有键值对
     *
     * @return Map对象
     */
    public Map<String, ?> getAll() {
        return sp.getAll();
    }

    /**
     * 从SP中移除该key
     *
     * @param key 键
     */
    public void remove(Key key) {
        editor.remove(""+key).apply();
    }
//    public void remove(String key) {
//        editor.remove(key).apply();
//    }

    /**
     * 判断SP中是否存在该key
     *
     * @param key 键
     * @return {@code true}: 存在<br>{@code false}: 不存在
     */

    public boolean contains(Key key) {
        return sp.contains(""+key);
    }
//    public boolean contains(String key) {
//        return sp.contains(key);
//    }

    /**
     * 清除SP中所有数据
     */
    public void clear() {
        editor.clear().apply();
    }


}